home *** CD-ROM | disk | FTP | other *** search
/ Windows Expert / Windows Expert.iso / others / ole_101.zip / PATRON.ZIP / OCLIENT.H < prev    next >
C/C++ Source or Header  |  1992-04-13  |  13KB  |  364 lines

  1. /*
  2.  * OCLIENT.H
  3.  *
  4.  * Public include file for functions and structures that an OLE client
  5.  * application can use to treat the code in the modules listed below
  6.  * as a library.
  7.  *
  8.  *     OLECLI.C
  9.  *     OLEOBJ.C
  10.  *     OLESTREA.C
  11.  *     OLEVTBL.C
  12.  *
  13.  * Copyright(c) Microsoft Corp. 1992 All Rights Reserved
  14.  *
  15.  */
  16.  
  17.  
  18.  
  19. /*
  20.  * OLE-Specific string identifiers.  These are defined first so
  21.  * we can define an array of pointers to these strings and load
  22.  * then when a DOCUMENT structure is allocated.  The PSZOLE macro
  23.  * returns a string pointer for the given index.
  24.  */
  25.  
  26. #define IDS_OLEFIRST            1024
  27. #define IDS_NATIVE              IDS_OLEFIRST+0
  28. #define IDS_OWNERLINK           IDS_OLEFIRST+1
  29. #define IDS_OBJECTLINK          IDS_OLEFIRST+2
  30. #define IDS_STDFILEEDITING      IDS_OLEFIRST+3
  31. #define IDS_AUTOMATIC           IDS_OLEFIRST+4
  32. #define IDS_MANUAL              IDS_OLEFIRST+5
  33. #define IDS_UNAVAILABLE         IDS_OLEFIRST+6
  34. #define IDS_STATIC              IDS_OLEFIRST+7
  35. #define IDS_PACKAGE             IDS_OLEFIRST+8
  36. #define IDS_UPDATELINKS0        IDS_OLEFIRST+9
  37. #define IDS_UPDATELINKS1        IDS_OLEFIRST+10
  38. #define IDS_UPDATELINKS2        IDS_OLEFIRST+11
  39. #define IDS_CHANGELINK          IDS_OLEFIRST+12
  40. #define IDS_CHANGELINKS1        IDS_OLEFIRST+13
  41. #define IDS_CHANGELINKS2        IDS_OLEFIRST+14
  42. #define IDS_INSERTTITLE         IDS_OLEFIRST+15
  43. #define IDS_NOINSERT            IDS_OLEFIRST+16
  44. #define IDS_VERBEDIT            IDS_OLEFIRST+17
  45. #define IDS_OBJECT              IDS_OLEFIRST+18
  46. #define IDS_OBJECTBUSY          IDS_OLEFIRST+19
  47. #define IDS_OLEERROR            IDS_OLEFIRST+20
  48. #define IDS_OLEERRORMSG         IDS_OLEFIRST+21
  49. #define IDS_UPDATEMSG           IDS_OLEFIRST+22
  50. #define IDS_OLELAST             IDS_OLEFIRST+23
  51.  
  52. #define COLESTRINGS             (IDS_OLELAST-IDS_OLEFIRST)
  53. #define CCHOLESTRINGMAX         80
  54.  
  55.  
  56. /*
  57.  * Macro to reference a string through rgpszOLE given an index above.
  58.  * Depends on IDS_OLEFIRST being the first string in a sequential list.
  59.  */
  60. #define PSZOLE(i) rgpszOLE[i-IDS_OLEFIRST]
  61.  
  62.  
  63. //Globals specific to OLE code.
  64. extern char NEAR *rgpszOLE[COLESTRINGS];
  65.  
  66.  
  67.  
  68.  
  69. /*
  70.  * Definitions for OLE dialogs.  If ID_NULL is not defined we'll
  71.  * define it ourselves.
  72.  */
  73.  
  74. #define IDD_INSERTOBJECT        1024
  75. #define IDD_LINKS               1025
  76. #define IDD_BADLINKS            1026
  77.  
  78. #define ID_OBJECTLIST           1024
  79. #define ID_LINKLIST             1025
  80. #define ID_UPDATEAUTO           1026
  81. #define ID_UPDATEMANUAL         1027
  82. #define ID_UPDATENOW            1028
  83. #define ID_CANCELLINK           1029
  84. #define ID_CHANGELINK           1030
  85. #define ID_ICONEX               1031
  86. #define ID_LINKS                1032
  87.  
  88.  
  89. #ifndef ID_NULL
  90. #define ID_NULL                 -1
  91. #endif
  92.  
  93.  
  94.  
  95. //File-related string lengths.
  96. #define CCHPATHMAX              256
  97. #define CCHFILENAMEMAX          15
  98.  
  99.  
  100.  
  101.  
  102. /*
  103.  * Message processing function necessary to use a message loop within
  104.  * the OLE code where we do not have a window handle and accelerator
  105.  * table available.
  106.  */
  107.  
  108. typedef BOOL (FAR PASCAL *LPFNMSGPROC)(LPMSG);
  109.  
  110.  
  111. /*
  112.  * Cheapo stream structure for storing objects directly in applcation files.
  113.  */
  114.  
  115. typedef struct
  116.     {
  117.     LPOLESTREAMVTBL     pvt;            //Standard
  118.     HANDLE              hFile;          //File handle we need in methods.
  119.     } STREAM;
  120.  
  121.  
  122. typedef STREAM FAR *LPSTREAM;
  123. #define CBSTREAM sizeof(STREAM)
  124.  
  125.  
  126.  
  127.  
  128. /*
  129.  * The DOCUMENT structure for this OLE client application is NOT the
  130.  * OLECLIENT structure.  OLECLIENT is reflected in the OBJECT structure
  131.  * as we use one OLECLIENT structure for each object.  This DOCUMENT
  132.  * structure simply holds variables that apply to a document that
  133.  * holds one or more objects.
  134.  */
  135.  
  136. typedef struct _DOCUMENT
  137.     {
  138.     LPOLECLIENTVTBL     pvt;            //Stores the global VTBL for all objects.
  139.     LHCLIENTDOC         lh;             //Required for later OLE calls.
  140.     ATOM                aCaption;       //Application name.
  141.     ATOM                aFile;          //Document name.
  142.     LPFNMSGPROC         pfnMsgProc;     //Message translate/dispatch function.
  143.     LPFNMSGPROC         pfnBackProc;    //Background process function.
  144.     LPSTREAM            pStream;        //Pointer to our document STREAM
  145.  
  146.     HWND                hWnd;           //HWND of document window.
  147.  
  148.     WORD                cObjects;       //Number of objects in the list.
  149.     struct _OBJECT FAR *pObjFirst;      //Pointer to start of OBJECT list.
  150.     struct _OBJECT FAR *pObjLast;       //Pointer to end of OBJECT list.
  151.  
  152.     WORD                cfNative;       //OLE Clipboard formats.
  153.     WORD                cfOwnerLink;
  154.     WORD                cfObjectLink;
  155.  
  156.     HWND                hList;          //Listbox handle for use in Links dialog.
  157.     HWND                cxList;         //Tab width of the links dialog.
  158.     WORD                cLinks;         //Number of links we load from a file.
  159.     WORD                cWait;          //Number of objects awaiting release.
  160.  
  161.     /*
  162.      * In the constructor for this structure we allocate a piece of
  163.      * global memory for scratch work.  This prevents us from having
  164.      * to allocate scratch memory over and over again, especially when
  165.      * working with the links dialog where be build and rebuild listbox
  166.      * strings.
  167.      *
  168.      * DO NOT depend on integrety of these strings across calls into
  169.      * the OLE helper functions referenced in this file unless you
  170.      * first check the sources:  HACK:  Make a list of fn's using them.
  171.      */
  172.  
  173.     HANDLE              hData;          //Global handle to scratch area.
  174.     LPSTR               pszData1;       //Pointers to blocks in hData
  175.     LPSTR               pszData2;       //each containing CBSCRATCH
  176.     LPSTR               pszData3;       //bytes.
  177.     } DOCUMENT;
  178.  
  179. typedef DOCUMENT FAR *LPDOCUMENT;
  180. #define CBDOCUMENT sizeof(DOCUMENT)
  181.  
  182. #define CBSCRATCH   1024
  183. #define CSCRATCH    3
  184.  
  185.  
  186.  
  187.  
  188. /*
  189.  * The OBJECT structure for this application acts in place of the
  190.  * OLECLIENT for each embedded or linked object.  The framework
  191.  * of allocating and manipulating objects is centered around this
  192.  * data structure, so you are free to change or add to it as you
  193.  * see fit.
  194.  */
  195.  
  196. typedef struct _OBJECT
  197.     {
  198.     LPOLECLIENTVTBL     pvt;            //Lets us use this as an OLECLIENT.
  199.     LPOLEOBJECT         pObj;           //Identifies the object in OLECLI
  200.     BOOL                fRelease;       //Released flag.
  201.     BOOL                fOpen;          //Was this object activated?
  202.     struct _OBJECT FAR *pPrev;          //Previous and next OBJECTs in
  203.     struct _OBJECT FAR *pNext;          //the object list.
  204.     LPDOCUMENT          pDoc;           //Parent document.
  205.     ATOM                aName;          //Name of object.
  206.     ATOM                aClass;         //Classname of the object.
  207.     ATOM                aLink;          //Path of linked document.
  208.     ATOM                aSel;           //Selection information.
  209.     DWORD               dwType;         //Object type from OleQueryType
  210.     OLEOPT_UPDATE       dwLink;         //Type of link, auto, manual, or static
  211.     BOOL                fNoMatch;       //Marks the object when updating links.
  212.     LPOLEOBJECT         pObjUndo;       //Clone OLEOBJECT for undo usage.
  213.     BOOL                fUndoOpen;      //Indicates if the cloned object is open.
  214.     BOOL                fLinkChange;    //Indicates modification in Links dialog.
  215.     HANDLE              hData;          //App-defined data.
  216.     } OBJECT;
  217.  
  218.  
  219. typedef OBJECT FAR *LPOBJECT;
  220. #define CBOBJECT sizeof(OBJECT)
  221.  
  222.  
  223.  
  224.  
  225.  
  226. /*
  227.  * Defined for internal use in the Links dialog and when updating links.
  228.  * OLE.H does not define values for unavailable and static link update
  229.  * options in its OLEOPT_UPDATE type.
  230.  */
  231.  
  232. #define OLEUPDATE_UNAVAILABLE   -2
  233. #define OLEUPDATE_STATIC        -1
  234.  
  235.  
  236. /*
  237.  * This type is defined for the convenience of PVtblClientAllocate,
  238.  * so it can typecast a FARPROC to the correct type in the OLECLIENTVTBL.
  239.  */
  240.  
  241. typedef int (FAR PASCAL *LPCLIENTCALLBACK)(LPOLECLIENT, OLE_NOTIFICATION, LPOLEOBJECT);
  242.  
  243.  
  244. /*
  245.  * The parameter types for this prototype match the OLE.H definitions
  246.  * since we will assign a pointer of this type to the LPOLESTREAMVTBL.
  247.  * This should not be used to typecast an application-specific method
  248.  * as those defined above, or else you'll see warnings about different
  249.  * parameter types.
  250.  */
  251.  
  252. typedef DWORD (FAR PASCAL *LPSTREAMMETHOD)(LPOLESTREAM, LPSTR, DWORD);
  253.  
  254.  
  255.  
  256.  
  257. /*
  258.  * Enumeration function types for FObjectsEnumerate and FLinksEnumerate
  259.  */
  260.  
  261. typedef BOOL (FAR PASCAL *LPFNOBJECTENUM)(LPDOCUMENT, LPOBJECT, DWORD);
  262. typedef BOOL (FAR PASCAL *LPFNLINKENUM)(HWND, WORD, LPDOCUMENT, LPOBJECT, DWORD);
  263.  
  264. //Selection types for FLinksEnumerate
  265.  
  266. #define ENUMLINK_SELECTED       0
  267. #define ENUMLINK_UNSELECTED     1
  268. #define ENUMLINK_ALL            2
  269.  
  270.  
  271.  
  272. //Windows.h leaves this out
  273. typedef BOOL FAR *LPBOOL;
  274.  
  275.  
  276. /*
  277.  * Function prototypes.
  278.  */
  279.  
  280. //OLEDOC.C
  281. LPDOCUMENT      FAR PASCAL PDocumentAllocate(LPBOOL, HANDLE, LPSTR, FARPROC, FARPROC, FARPROC);
  282. LPDOCUMENT      FAR PASCAL PDocumentFree(LPDOCUMENT);
  283. BOOL            FAR PASCAL FDocumentFileSet(LPDOCUMENT, LPSTR);
  284. void            FAR PASCAL PDocumentMsgProcSet(LPDOCUMENT, LPFNMSGPROC);
  285. void            FAR PASCAL PDocumentBackgroundProcSet(LPDOCUMENT, LPFNMSGPROC);
  286. HANDLE              PASCAL HLoadOLEStrings(HANDLE);
  287.  
  288.  
  289. //OLEINS.C
  290. LPOBJECT        FAR PASCAL PObjectInsertDialog(HWND, HANDLE, LPDOCUMENT, LPSTR);
  291. BOOL            FAR PASCAL InsertObjectProc(HWND, WORD, WORD, LONG);
  292.  
  293.  
  294. //OLELIB.C
  295. BOOL            FAR PASCAL FFileDialog(HWND, HANDLE, LPSTR, LPSTR, LPSTR, LPSTR, BOOL);
  296. LPSTR           FAR PASCAL PszFileFromPath(LPSTR);
  297. LPSTR           FAR PASCAL PszExtensionFromFile(LPSTR);
  298. LPSTR           FAR PASCAL PszWhiteSpaceScan(LPSTR, BOOL);
  299. DWORD           FAR PASCAL DwReadHuge(WORD, LPVOID, DWORD);
  300. DWORD           FAR PASCAL DwWriteHuge(WORD, LPVOID, DWORD);
  301. void            FAR PASCAL RectConvertMappings(LPRECT, WORD, WORD);
  302.  
  303.  
  304. //OLELINK1.C
  305. BOOL            FAR PASCAL FOLELinksEdit(HWND, HANDLE, LPDOCUMENT);
  306. BOOL            FAR PASCAL LinksProc(HWND, WORD, WORD, LONG);
  307. BOOL            FAR PASCAL FEnumLinksInit(LPDOCUMENT, LPOBJECT, DWORD);
  308. BOOL            FAR PASCAL FChangeLinks(HWND, LPDOCUMENT);
  309. BOOL            FAR PASCAL FLinksEnumerate(HWND, LPDOCUMENT, LPFNLINKENUM, WORD, DWORD);
  310. BOOL            FAR PASCAL FEnumOptionChange(HWND, WORD, LPDOCUMENT, LPOBJECT, DWORD);
  311. BOOL            FAR PASCAL FEnumLinkUpdate(HWND, WORD, LPDOCUMENT, LPOBJECT, DWORD);
  312. BOOL            FAR PASCAL FEnumLinkCancel(HWND, WORD, LPDOCUMENT, LPOBJECT, DWORD);
  313. BOOL            FAR PASCAL FEnumLinkChange(HWND, WORD, LPDOCUMENT, LPOBJECT, DWORD);
  314. BOOL            FAR PASCAL FEnumLinkFind(HWND, WORD, LPDOCUMENT, LPOBJECT, DWORD);
  315. BOOL            FAR PASCAL FEnumLinksUndo(HWND, WORD, LPDOCUMENT, LPOBJECT, DWORD);
  316. BOOL            FAR PASCAL FEnumLinksAccept(HWND, WORD, LPDOCUMENT, LPOBJECT, DWORD);
  317.  
  318.  
  319. //OLELINK2.C
  320. void            FAR PASCAL EnableLinkButtons(HWND, HWND);
  321. WORD            FAR PASCAL CchLinkStringCreate(LPSTR, LPDOCUMENT, LPOBJECT);
  322. WORD            FAR PASCAL CchTextLimit(LPSTR, HDC, WORD);
  323. void            FAR PASCAL LinkStringChange(HWND, WORD, LPSTR);
  324.  
  325.  
  326. //OLELOAD.C
  327. BOOL            FAR PASCAL FObjectAutoLinkUpdate(LPDOCUMENT, LPOBJECT);
  328. BOOL            FAR PASCAL FOLELinksUpdate(HWND, HANDLE, LPDOCUMENT);
  329. BOOL            FAR PASCAL FEnumUpdate(LPDOCUMENT, LPOBJECT, DWORD);
  330. BOOL            FAR PASCAL LinksUnavailableProc(HWND, WORD, WORD, LONG);
  331.  
  332.  
  333. //OLEMENU.C
  334. void            FAR PASCAL MenuOLEClipboardEnable(HMENU, LPDOCUMENT, LPWORD);
  335. BOOL            FAR PASCAL FEnumOLEPaste(LPDOCUMENT, LPOBJECT, DWORD);
  336. void            FAR PASCAL MenuOLEVerbAppend(HMENU, WORD, WORD, LPDOCUMENT, LPOBJECT);
  337.  
  338.  
  339. //OLEOBJ.C
  340. LPOBJECT        FAR PASCAL PObjectAllocate(LPBOOL, LPDOCUMENT);
  341. LPOBJECT        FAR PASCAL PObjectInitialize(LPOBJECT, LPDOCUMENT);
  342. LPOBJECT        FAR PASCAL PObjectFree(LPDOCUMENT, LPOBJECT);
  343. BOOL            FAR PASCAL FObjectsEnumerate(LPDOCUMENT, LPFNOBJECTENUM, DWORD);
  344. BOOL            FAR PASCAL FObjectPaint(HDC, LPRECT, LPOBJECT);
  345. BOOL            FAR PASCAL FObjectRectSet(LPDOCUMENT, LPOBJECT, LPRECT, WORD);
  346. BOOL            FAR PASCAL FObjectRectGet(LPOBJECT, LPRECT, WORD);
  347. BOOL            FAR PASCAL FObjectDataGet(LPOBJECT, WORD, LPSTR);
  348. BOOL            FAR PASCAL FObjectDataSet(LPDOCUMENT, LPOBJECT, WORD, LPSTR);
  349. BOOL            FAR PASCAL FOLEReleaseWait(BOOL, LPDOCUMENT, LPOBJECT);
  350. OLESTATUS       FAR PASCAL OsError(OLESTATUS, LPDOCUMENT, LPOBJECT, BOOL);
  351.  
  352. //OLESTREA.C
  353. LPSTREAM        FAR PASCAL PStreamAllocate(LPBOOL, HANDLE, FARPROC, FARPROC);
  354. LPSTREAM        FAR PASCAL PStreamFree(LPSTREAM);
  355. DWORD           FAR PASCAL StreamGet(LPSTREAM, LPBYTE, DWORD);
  356. DWORD           FAR PASCAL StreamPut(LPSTREAM, LPBYTE, DWORD);
  357.  
  358.  
  359. //OLEVTBL.C
  360. LPOLECLIENTVTBL FAR PASCAL PVtblClientAllocate(LPBOOL, HANDLE, FARPROC);
  361. LPOLECLIENTVTBL FAR PASCAL PVtblClientFree(LPOLECLIENTVTBL);
  362. LPOLESTREAMVTBL FAR PASCAL PVtblStreamAllocate(LPBOOL, HANDLE, FARPROC, FARPROC);
  363. LPOLESTREAMVTBL FAR PASCAL PVtblStreamFree(LPOLESTREAMVTBL);
  364.